package org.ReportDesigner.designerPDF;

import org.ReportDesigner.Designer;
import org.ReportDesigner.configurator.Configuration;
import org.ReportDesigner.reportModel.ReportElement;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;


public class PDFDesigner implements Designer {

    private File outputFile;
    private ReportElement report;
    private static Configuration configuration;


    public PDFDesigner(File outputFile, ReportElement report, Configuration configuration){
        this.outputFile = outputFile;
        this.report = report;
        this.configuration = configuration;

    }

    public PDFDesigner(File outputFile, ReportElement report){
        this.outputFile = outputFile;
        this.report = report;
    }

    public PDFDesigner(){

    }

    @Override
    public void design() throws FileNotFoundException, DocumentException {
        if (report != null){
            //создаем объект pdf документ
            Document document = new Document();
            //инициализируем класс записи pdf документа
            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(outputFile));
            //открываем документ для редактирования
            document.open();
            //устанавливаем размер страницы
            document.setPageSize(PageSize.A4);
            //импортируем шрифты в соответствии с конфигурацией
            FontFactory.registerDirectory(configuration.getFontPath(),true);
            //записываем отчет в документ
            /**
             * подумать над вставкой повторяющихся элементов!!!!! возможна вставка
             * класса HeaderFooter пакета designerPDF как private class в Repeated
             */
            String str = configuration.getFontPath();
            str = str + " ";
            this.report.addToDocument(configuration, document);
            //закрываем документ
            document.close();
        }
        else {
            throw new FileNotFoundException();
        }




    }



    public File getOutputFile() {
        return outputFile;
    }

    public void setOutputFile(File outputFile) {
        this.outputFile = outputFile;
    }

    public ReportElement getReport() {
        return report;
    }

    public void setReport(ReportElement report) {
        this.report = report;
    }

    public Configuration getConfiguration() {
        return configuration;
    }

    public void setConfiguration(Configuration configuration) {
        this.configuration = configuration;
    }
}
